
#include <iostream>
#include <chrono>
#include <functional> // 用于 std::function，支持任意函数作为参数
#include <string>
#include <glog/logging.h> // 可选：结合 glog 输出日志

// 通用计时工具函数：
// - 输入：函数名（用于日志）、待计时的函数（支持带参数的函数）
// - 输出：函数耗时（单位：毫秒 ms）
template <typename Func, typename... Args>
double time_function(const std::string &func_name, Func &&func, Args &&...args)
{
    // 记录开始时间
    auto start = std::chrono::steady_clock::now();

    // 调用目标函数（完美转发参数，支持任意参数列表）
    std::forward<Func>(func)(std::forward<Args>(args)...);

    // 计算耗时
    auto end = std::chrono::steady_clock::now();
    double cost_ms = std::chrono::duration_cast<std::chrono::milliseconds>(
                         end - start)
                         .count();

    // 输出耗时（可替换为 std::cout 或 VLOG）
    LOG(INFO) << "[Timer] " << func_name << " cost: " << cost_ms << " ms";
    return cost_ms;
}


// 静态变量：存储上次的开始时间（仅初始化一次）
static std::chrono::steady_clock::time_point last_start;

double timer_begin(const std::string &task_name)
{
    last_start = std::chrono::steady_clock::now();
    return 0.0;
   
}
double timer_end(const std::string &task_name)
{
    auto end = std::chrono::steady_clock::now();
    double cost = std::chrono::duration_cast<std::chrono::milliseconds>(
                      end - last_start)
                      .count();
    LOG(INFO) << "[Timer] " << task_name << " cost: " << cost << " ms";
    return cost;
}
